package me.jiatao.kotlinmall.ui.adapter

import android.text.Html
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.module.LoadMoreModule
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import me.jiatao.baselibrary.ext.loadWithOptions
import me.jiatao.kotlinmall.R
import me.jiatao.kotlinmall.data.protocol.Article
import org.jetbrains.anko.toast

class HomeAdapter(dataList: MutableList<Article>) :
    BaseQuickAdapter<Article, BaseViewHolder>(R.layout.item_home_list, dataList),
    LoadMoreModule {

    init {
        setDiffCallback(ArticleItemCallback())
        addChildClickViewIds(R.id.iv_like)
        setOnItemChildClickListener { _, _, position ->
            context.toast("positon --> $position")
        }
    }

    override fun convert(helper: BaseViewHolder, item: Article) {
        val authorStr = if (item.author.isNotEmpty()) item.author else item.shareUser
        helper.setText(R.id.tv_article_title, Html.fromHtml(item.title))
            .setText(R.id.tv_article_author, authorStr)
            .setText(R.id.tv_article_date, item.niceDate)
            .setImageResource(
                R.id.iv_like,
                if (item.collect) R.drawable.ic_like else R.drawable.ic_like_not
            )
        val chapterName = when {
            item.superChapterName.isNotEmpty() and item.chapterName.isNotEmpty() ->
                "${item.superChapterName} / ${item.chapterName}"
            item.superChapterName.isNotEmpty() -> item.superChapterName
            item.chapterName.isNotEmpty() -> item.chapterName
            else -> ""
        }
        helper.setText(R.id.tv_article_chapterName, chapterName)
        if (item.envelopePic.isNotEmpty()) {
            helper.getView<ImageView>(R.id.iv_article_thumbnail).run {
                visibility = View.VISIBLE
                loadWithOptions(item.envelopePic)
            }

        } else {
            helper.getView<ImageView>(R.id.iv_article_thumbnail).visibility = View.GONE
        }

        val tv_fresh = helper.getView<TextView>(R.id.tv_article_fresh)
        if (item.fresh) {
            tv_fresh.visibility = View.VISIBLE
        } else {
            tv_fresh.visibility = View.GONE
        }
        val tv_top = helper.getView<TextView>(R.id.tv_article_top)
        if (item.top == "1") {
            tv_top.visibility = View.VISIBLE
        } else {
            tv_top.visibility = View.GONE
        }
        val tv_article_tag = helper.getView<TextView>(R.id.tv_article_tag)
        if (item.tags.size > 0) {
            tv_article_tag.visibility = View.VISIBLE
            tv_article_tag.text = item.tags[0].name
        } else {
            tv_article_tag.visibility = View.GONE
        }
    }

}


/**
 * 用于计算列表中两个非空项目之间的差异的回调
 */
class ArticleItemCallback : DiffUtil.ItemCallback<Article>() {
    /**
     * 调用以检查两个对象是否表示同一item。
     * 例如，如果您的商品具有唯一的ID，则此方法应检查其ID的相等性。
     * 注意：空对象不会回调该方法
     */
    override fun areItemsTheSame(oldItem: Article, newItem: Article): Boolean {
        return oldItem.id == newItem.id
    }

    /**
     * 调用以检查两个项目是否具有相同的数据，用于检测item的内容是否已更改。
     * 此方法检查相等性而不是Object.equals（Object），以便您可以根据自己的UI更改其行为。
     * 例如，如果将DiffUtil与RecyclerView.Adapter一起使用，则应返回项目的视觉表示是否相同。
     * 仅当areItemsTheSame（T，T）对这些项目返回true时，才调用此方法。
     * 注意：假定两个空项目表示相同的内容。 在这种情况下，不会调用此回调
     */
    override fun areContentsTheSame(oldItem: Article, newItem: Article): Boolean {
        return oldItem == newItem
    }

}